package article2.builder;

/**
 *
 * 第一种方法：
 * 重叠构造器 (telescoping con tructor )模式
 * Telescoping constructor patte - does not scale well!
 *
 * 方法的弊端：这个构造器通常需要许多你本不想设置的参数，但还是不得不为它们传递值。并且随着参数数目的增加，难以控制。
 * 方法的总结：重叠构造器模式可行，但是当有许多参数的时候，客户端代码会很难编写，并且仍然较难以阅读。用户无法快速明确的知道参数代表的意思。
 * 一串类型相同的参数，输入过程中出错，编译器不会出错，但是程序运行时会出现错误的行为。
 *
 * @author cctv
 */
public class NutritionFactsByTct {
    /**
     * (ml)                required
     */
    private final int servingSize;

    /**
     * (per container)    required
     */
    private final int servings;

    /**
     * optional
     */
    private final int calories;

    /**
     * (g)                optional
     */
    private final int fat;

    /**
     * (mg)                optional
     */
    private final int sodium;

    /**
     * (g)                optional
     */
    private final int carbohydrate;

    public NutritionFactsByTct(int servingsize, int servings) {
        this(servingsize, servings, 0);
    }

    public NutritionFactsByTct(int servingsize, int servings, int calories) {
        this(servingsize, servings, calories, 0);
    }

    public NutritionFactsByTct(int servingsize, int servings, int calories, int fat) {
        this(servingsize, servings, calories, fat, 0);
    }

    public NutritionFactsByTct(int servingsize, int servings, int calories, int fat, int sodium) {
        this(servingsize, servings, calories, fat, sodium, 0);
    }

    public NutritionFactsByTct(int servingsize, int servings, int calories, int fat, int sodium, int carbohydrate) {
        super();
        this.servingSize = servingsize;
        this.servings = servings;
        this.calories = calories;
        this.fat = fat;
        this.sodium = sodium;
        this.carbohydrate = carbohydrate;
    }
}